package sun.superstring.innerclass4;

import java.util.Arrays;
import java.util.Comparator;

public class Test4 {
    public static void main(String[] args) {
        // 目标：完成给数组排序，理解其中匿名内部类的用法
        // 准备一个学生类型的数组，存放6个学生对象
        Student[] stus = new Student[6];
        stus[0] = new Student("殷素素", 35, 171.5, '女');
        stus[1] = new Student("赵敏", 18, 168.5, '女');
        stus[4] = new Student("金毛狮王", 35, 181, '男');
        stus[2] = new Student("周芷若", 18, 172.5, '女');
        stus[3] = new Student("张无忌", 25, 170.5, '男');
        stus[5] = new Student("小昭", 19, 168.5, '女');


        // 需求：按照年龄升序排序。可以调用sun公司写好的API直接对数组进行排序
        // public static void sort(int[] a)   // 会报错
        // public static void sort(T[] a, Comparator<T> c)   T:代表类型
        //               参数一：需要排序的数组
        //               参数二：需要给sort声明一个比较器对象（指定排序的规则）
        //     sort方法内部会调用匿名内部类对象的compare方法，对数组中的学生对象进行两两比较，从而实现排序。（底层）
        Arrays.sort(stus, new Comparator<Student>() {   // < >：里面是泛型
            @Override
            public int compare(Student o1, Student o2) {
                // 指定排序规则。
                // 如果你认为左边对象o1 大于 右边对象o2，返回正整数。
                // 如果你认为左边对象o1 小于 右边对象o2，返回负整数。
                // 如果你认为左边对象o1 等于 右边对象o2，返回0。

//                if (o1.getAge() > o2.getAge()) {
//                    return 1;
//                } else if (o1.getAge() < o2.getAge()) {
//                    return -1;
//                }
//                return 0;
                return o1.getAge() - o2.getAge();  // 按照年龄的升序！
                // return o2.getAge() - o1.getAge();  // 按照年龄的降序！
            }
        });


        // 遍历数组中的学生对象并输出
        for (int i = 0; i < stus.length; i++) {
            Student s = stus[i];
            System.out.println(s);
        }
    }
}
